﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.strq
    约化对称矩阵为三对角阵
    参数 a: a[n][n]存放n阶实对称矩阵A。
    参数 n: 
    参数 q: q[n][n]返回豪斯荷尔德变换的乘积矩阵Q。
    参数 b: b[n]返回对称三角阵中的主对角线元素。
    参数 c: c[n]前n-1个元素返回对称三角阵中的次对角线元素。
    返回值 若矩阵非对称，则显示错误信息，并返回0标志值。否则返回非0标志值。
    */

    public static string drive_strq()
    {
        int i, j;
        double[] b = new double[5];
        double[] c = new double[5];
        double[,] q = new double[5, 5];
        double[,] a = new double[5, 5] {
            {10.0,1.0,2.0,3.0,4.0},
            {1.0,9.0,-1.0,2.0,-3.0},
            {2.0,-1.0,7.0,3.0,-5.0},
            {3.0,2.0,3.0,12.0,-1.0},
            {4.0,-3.0,-5.0,-1.0,15.0}
        };

        string rs = "";
        rs += gl.html_table("对称矩阵 A", a);

        i = gl.strq(a, 5, q, b, c);
        if (i <= 0) return "error: " + i;

        rs += gl.html_table("返回的乘积矩阵 Q", q);
        rs += gl.html_table("返回的主对角线元素 B", b);
        rs += gl.html_table("返回的次对角线元素 C", c);
        return rs;
    }
}
